Electronic data storage utilizing commonly available memories (such as Dynamic Random Access Memory or DRAM) can be problematic. Specifically, there is a finite probability that, when data is stored in memory and subsequently retrieved, the retrieved data will suffer some corruption. For example, DRAM stores information in relatively small capacitors that may suffer a transient corruption due to a variety of mechanisms, e.g., charged particles or radiation (i.e., soft errors). Additionally, data corruption may occur as the result of hardware failures such as loose memory modules, blown chips, wiring defects, and/or the like. The errors caused by such failures are often referred to as repeatable errors, since the same physical mechanism repeatedly causes the same pattern of data corruption.
To address this problem, a variety of error detection and error correction algorithms have been developed. In general, error detection algorithms typically employ redundant data added to a string of data. The redundant data is calculated utilizing a checksum or cyclic redundancy check (CRC) operation. When the string of data and the original redundant data is retrieved, the redundant data is recalculated utilizing the retrieved data. If the recalculated redundant data does not match the original redundant data, data corruption in the retrieved data is detected.
Error correction code (ECC) algorithms operate in a manner similar to error detection algorithms. When data (or, payload) is stored, redundant data is calculated and stored in association with the data. When the data and the redundant data are subsequently retrieved, the redundant data is recalculated and compared to the retrieved redundant data. When an error is detected (e.g, the original and recalculated redundant data do not match), the original and recalculated redundant data may be used to correct certain categories of errors.
Although current ECC solutions are known to be generally effective in addressing certain types of memory errors, higher levels of reliability are constantly being pursued in the design of memory systems.